﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using BGCOP.CAVTOP.INNERDEFS;

namespace BGCOP.CAVTOP.UTCOM.WINFORMS
{
    public partial class frmMultiInners : Form
    {
        #region Definicion de variables de los inners

        private Inner[] vectorInners = new Inner[32];
        public string DescEstado = "";
        public int InnerActual = 1;
        public int PuertoComm = 3570;
        public bool Termino = false;
        public int qtyB = 14;
        public int MaxInners = 2;   //maximo numero de inners en el sistema
        DateTime t1 = DateTime.Now;
        DateTime t2 = DateTime.Now;
        DateTime t4 = DateTime.Now;
        DateTime t5 = DateTime.Now;
        TimeSpan t3 = new TimeSpan();
        private int fallas = 0;

        byte Origem = 0;
        byte Complemento = 0;
        StringBuilder Cartao = new StringBuilder();
        byte Dia = 0;
        byte Mes = 0;
        byte Ano = 0;
        byte Hora = 0;
        byte Minuto = 0;
        byte Segundo = 0;
        string strCartao = string.Empty;
        Bilhete evento;
        #endregion

        #region utilidades
        public void AppendTextBox(TextBox txtB, string value)
        {
            if (txtB.InvokeRequired)
            {
                this.Invoke(new Action<TextBox, string>(AppendTextBox), new object[] { txtB, value });
                return;
            }
            else
            {
                txtB.AppendText("[" + DateTime.Now + "] " + value + "\n");
                txtB.ScrollToCaret();

            }

        }

        public void AppendTextBoxL(ToolStripLabel txtB, string value)
        {
            if (InvokeRequired)
            {
                this.Invoke(new Action<ToolStripLabel, string>(AppendTextBoxL), new object[] { txtB, value });
                return;
            }
            else
            {
                txtB.Text = value;


            }

        }

        public void changeValpb(int value)
        {
            if (InvokeRequired)
            {
                this.Invoke(new Action<int>(changeValpb), new object[] { value });
                return;
            }
            else
            {
                //toolStripProgressBar1.Value = value;
            }
        }
        #endregion


        #region Contructor
        public frmMultiInners()
        {
            
            InitializeComponent();
            InnerActual = 1;
            for (int i = 0; i < 32; i++)
            {
                vectorInners[i] = new Inner();
                vectorInners[i].isInnerNet = false;
                vectorInners[i].CountPingOnline = 0;
                vectorInners[i].CountPingFail = 0;
                vectorInners[i].CountFails = 0;
                vectorInners[i].IdInner = i;
                vectorInners[i].Estado = 1;
                
                if (i == 2)
                {
                    vectorInners[2].isInnerNet = true;
                }
            }
            vectorInners[2].isInnerNet = true;
        }
        #endregion


        #region Inicio y fin del thread

        
       
        private void btnTerminar_Click(object sender, EventArgs e)
        {
            
            //terminar los threads
            Termino = true;
        }


        #endregion


        /// <summary>
        /// Examina los inners para todos los eventos que presenten
        /// </summary>
        public void ProcesoInners()
        {
            fallas = 0;
            int res;
            t1 = DateTime.Now;
            t2 = DateTime.Now;
            bool paso = false;
            EasyInner.DefinirTipoConexao((byte)Enumeradores.TipoConexao.TCP_IP_COM_PORTA_FIXA);
            //Close previously opened communication port, only as a precautionary measure
            EasyInner.FecharPortaComunicacao();
            //Initializes the TCP/IP communication port, the parameter is ignored in this case
            if (EasyInner.AbrirPortaComunicacao(PuertoComm) != (int)Enumeradores.Retorno.RET_COMANDO_OK)
            {
                AppendTextBox(textBox1, "Comunicacion con el puerto [" + PuertoComm.ToString() + "] ERROR!");
                return;
            }
            AppendTextBox(textBox1, "Comunicacion con el puerto [" + PuertoComm.ToString() + "] Exitosa!");
            Thread.Sleep(50);
            while (!Termino)
            {
                switch (vectorInners[InnerActual].Estado)
                {
                    case 1:
                        #region ping offline 

                        vectorInners[InnerActual].CountFails = 0;
                        AppendTextBox(textBox1,"Buscando Dispositivo...");    
                        //Thread.Sleep(1200);
                        res = EasyInner.Ping(InnerActual);
                            if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                            {
                                //contesta el ping del PC
                                AppendTextBox(textBox1, "Ping OK inner [" + InnerActual.ToString() + "]");
                                changeValpb(0);
                                vectorInners[InnerActual].isOnline = true;
                                vectorInners[InnerActual].TimerPingOnline = DateTime.Now;
                                vectorInners[InnerActual].TimerMsgNeg  = DateTime.Now;
                                vectorInners[InnerActual].Estado=2;
                            }
                            else
                            {
                               //error en la comunicacion
                                AppendTextBox(textBox1,
                                             "Ping error inner [" + InnerActual.ToString() + "] !");
                                vectorInners[InnerActual].isOnline = false;
                            }
                        #endregion
                        break;
                    case 2:
                        #region Configuracion Offline
                        EasyInner.ConfigurarInnerOffLine();
                        EasyInner.DefinirQuantidadeDigitosCartao((byte)qtyB);
                        
                        res=EasyInner.DefinirMensagemEntradaOffLine(1, "Entrada OK");
                        
                        res=EasyInner.DefinirMensagemSaidaOffLine( 1, "Saida OK");
                        
                        res=EasyInner.DefinirMensagemPadraoOffLine( 1, "*Fuera de Linea*");

                        if (vectorInners[InnerActual].isInnerNet == true)
                        {
                            EasyInner.ConfigurarAcionamento2((byte)Enumeradores.FuncaoAcionamento.ACIONA_REGISTRO_ENTRADA_OU_SAIDA, 4);
                            //Thread.Sleep(100);
                            //EasyInner.ConfigurarLeitor2((byte)Enumeradores.Operacao.DESATIVADO);
                        }
                        else
                        {
                            EasyInner.ConfigurarAcionamento2((byte)Enumeradores.FuncaoAcionamento.NAO_UTILIZADO, 3);
                        }
                        //Thread.Sleep(100);
                        res=EasyInner.EnviarMensagensOffLine(InnerActual);
                        EasyInner.ConfigurarTipoLeitor(2);
                        EasyInner.ReceberDataHoraDadosOnLine(1);
                        EasyInner.ConfigurarLeitor1((byte)Enumeradores.Operacao.ENTRADA_E_SAIDA);
                        EasyInner.ConfigurarLeitor2((byte)Enumeradores.Operacao.ENTRADA_E_SAIDA);
                        EasyInner.ConfigurarAcionamento1((byte)Enumeradores.FuncaoAcionamento.ACIONA_REGISTRO_ENTRADA_OU_SAIDA,7);
                        //EasyInner.ConfigurarAcionamento2((byte)Enumeradores.FuncaoAcionamento.ACIONA_REGISTRO_ENTRADA_OU_SAIDA, 7);
                        res = EasyInner.DefinirTipoListaAcesso(1);
                        res = EasyInner.DefinirFuncaoDefaultLeitoresProximidade(12);
                        //Thread.Sleep(100);
                        res = EasyInner.EnviarConfiguracoes((byte)InnerActual);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1, "Ajuste Inner offline OK");
                            
                        }
                        else
                        {
                            AppendTextBox(textBox1, "Error en Ajuste Inner offline");
                            vectorInners[InnerActual].CountFails+=1;
                            if (vectorInners[InnerActual].CountFails > 5)
                            {
                                //vuele a estado de reconexion

                                vectorInners[InnerActual].Estado = 1;
                                break;
                            }
                        }

                        
                        
                        

                        res = EasyInner.ApagarHorariosAcesso(InnerActual);
                        for (int d = 1; d <= 7; d++)//laço para preencher os 5 dias,1 a 5 (segunda a sexta)
                        {
                            //                                   Horario1,DIA    ,Faixa 1 , Horário  
                            res = EasyInner.InserirHorarioAcesso((byte) 1, (byte) d, (byte) 1, (byte) 5, 0);
                            //                                   Horario1,DIA    ,Faixa 1 , Horário  
                            res = EasyInner.InserirHorarioAcesso((byte) 1, (byte) d, (byte) (2), (byte) 23, 0);
                        }
                        //envia a tabela de horários
                        res = EasyInner.EnviarHorariosAcesso((byte)InnerActual);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1, "Enviados Horarios de Acceso");
                        }
                        else
                        {
                            AppendTextBox(textBox1, "Error en Enviados Horarios de Acceso");
                            vectorInners[InnerActual].CountFails++;
                            if (vectorInners[InnerActual].CountFails > 5)
                            {
                                //vuele a estado de reconexion

                                vectorInners[InnerActual].Estado = 1;
                                break;
                            }
                        }


                        //Início do envio da lista de horários 
                        
                        res = EasyInner.ApagarListaAcesso((byte)InnerActual);
                        
                        //Thread.Sleep(80);
                        //                                   Cartão       , Horário 1
                        res=EasyInner.InserirUsuarioListaAcesso("64692351783", (byte)1);
                        //                                   Cartão       , Horário 1
                        res=EasyInner.InserirUsuarioListaAcesso("64692351784", (byte)1);
                        //                                   Cartão       , Horário 1
                        res=EasyInner.InserirUsuarioListaAcesso("64692351785", (byte)1);
                        //                                   Cartão      , Horário 100 acesso sempre negado
                        res=EasyInner.InserirUsuarioListaAcesso("64692351782", (byte)100);
                        //                                   Cartão      , Horário 100 acesso sempre negado
                        res=EasyInner.InserirUsuarioListaAcesso("222222222222", (byte)101);
                        
                        res = EasyInner.EnviarListaAcesso((byte)InnerActual);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1, "Enviada Lista de Acceso");
                            vectorInners[InnerActual].Estado = 3;
                        }
                        else
                        {
                            AppendTextBox(textBox1, "Error en Enviar Lista de Acceso");
                            vectorInners[InnerActual].CountFails++;
                            if (fallas > 5)
                            {
                                //vuele a estado de reconexion
                                vectorInners[InnerActual].Estado = 1;
                                break;
                            }
                        }

                        

                        
                        #endregion
                        break;
                    case 3:
                        #region recolectar eventos de los inners
                        
                        AppendTextBox(textBox1, "Inner: " + InnerActual.ToString() + " Verificando Eventos en Inner");
                        //Thread.Sleep(350);
                        evento = new Bilhete();
                        evento.Ano = 0;
                        evento.Cartao = null;
                        evento.Cartao = new StringBuilder();
                        evento.Dia = 0;
                        evento.Hora = 0;
                        evento.Mes = 0;
                        evento.Minuto = 0;
                        evento.Tipo = 0;
                        
                        res = EasyInner.ColetarBilhete(InnerActual, ref evento.Tipo, ref evento.Dia, ref evento.Mes, ref evento.Ano,
                                                   ref evento.Hora, ref evento.Minuto, evento.Cartao);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1,
                                          "Inner: " + InnerActual.ToString() + " evento : " + evento.Cartao.ToString());
                        }
                        else
                        {
                            //fin de los evnetos
                            AppendTextBox(textBox1, "Inner: " + InnerActual.ToString() + " Fin de eventos del Inner");
                            vectorInners[InnerActual].Estado = 4;
                            //Termino = true;
                        }
                        
                        #endregion
                        break;
                    case 4:
                        #region Cambio automatico
                        //AppendTextBoxL(toolStripStatusLabel4, "Habilitar cambio automatico!");
                        //5 segundo para pasar a condicion offline desde online
                        EasyInner.HabilitarMudancaOnLineOffLine((byte)Enumeradores.MudancaOnlineOffline.SEM_PING_ONLINE, 5);
                        
                        //EasyInner.DefinirEntradasMudancaOffLine((byte)Enumeradores.Opcao.SIM,//Teclado
                        //                                        (byte)Enumeradores.Opcao.SIM,//Leitor1
                        //                                        (byte)Enumeradores.Opcao.NAO,//Leitor2
                        //                                        (byte)Enumeradores.Opcao.SIM//Verificação
                        //                                        );//Identificação
                        EasyInner.DefinirMensagemPadraoMudancaOffLine((byte)Enumeradores.Opcao.SIM, "*Fuera de Linea*");
                        EasyInner.DefinirMensagemPadraoMudancaOnLine((byte)Enumeradores.Opcao.SIM,  "   *En Linea*   ");
                        EasyInner.DefinirEntradasMudancaOnLine(7);
                        res = EasyInner.EnviarConfiguracoesMudancaAutomaticaOnLineOffLine(InnerActual);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " Conf Automatica on-off OK");
                            vectorInners[InnerActual].Estado  = 5;
                        }
                        else
                        {
                            AppendTextBox(textBox1, "Error Inner: " + InnerActual.ToString() + " Conf Automatica on-off");
                            vectorInners[InnerActual].CountFails++;
                            if (vectorInners[InnerActual].CountFails > 5)
                            {
                                //vuele a estado de reconexion
                                vectorInners[InnerActual].Estado  = 1;
                                break;
                            }
                        }
                        
                        #endregion
                        break;
                    case 5:
                        #region Configuracion Online
                        AppendTextBox(textBox1 , "Configuracion Online! Inner [" + InnerActual.ToString() +"]");
                        EasyInner.ConfigurarInnerOnLine();
                        EasyInner.DefinirQuantidadeDigitosCartao((byte)qtyB);
                        //EasyInner.HabilitarTeclado(1, 0);
                        EasyInner.ConfigurarTipoLeitor((byte)Enumeradores.TipoLeitor.PROXIMIDADE_ABATRACK2);
                        EasyInner.ReceberDataHoraDadosOnLine(1);
                        res = EasyInner.EnviarConfiguracoes(InnerActual);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " conf Online OK");
                            vectorInners[InnerActual].Estado  = 6;
                        }
                        else
                        {
                            AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " conf Online FAIL");
                            vectorInners[InnerActual].CountFails++;
                            if (vectorInners[InnerActual].CountFails > 5)
                            {
                                //vuele a estado de reconexion
                                vectorInners[InnerActual].Estado  = 1;
                                break;
                            }
                        }
                        
                        #endregion
                        break;
                    case 6:
                        #region Inner en linea
                        AppendTextBox(textBox1 , "Estado en linea! inner [" + InnerActual.ToString() + "]");
                        res = EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            //AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " msg online OK");
                            vectorInners[InnerActual].Estado = 7;
                        }
                        else
                        {
                            AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " msg online FAIL");
                            vectorInners[InnerActual].CountFails++;
                            if (vectorInners[InnerActual].CountFails  > 5)
                            {
                                //vuele a estado de reconexion
                                vectorInners[InnerActual].Estado = 1;
                                break;
                            }
                        }
                        
                        #endregion
                        break;
                    case 7:
                        #region Conf entrada en linea
                        if (paso == false)
                        {
                            paso = true;
                            AppendTextBox(textBox1, "Conf Entradas en linea! Inner [" + InnerActual.ToString() + "]");   
                        }
                        
                        res = EasyInner.EnviarFormasEntradasOnLine(
                        InnerActual,      //Numero do Inner..
                        (byte)qtyB ,  //Qtd Digitos Teclado..
                        0,                      //Eco do Teclado no Display..
                        (byte)Enumeradores.EntradasMudancaOnline.ACEITA_LEITURA_LEITOR1,  //TECLADO_E_LEITOR1_E_VERI_BIOMETRICA,//Teclado + Leitor 1 + Verificação Biométrica..
                        15,                     //Tempo teclado..
                        17);                    //Posição do Cursor no Teclado..
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                           // AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " Conf Entrada online OK");
                            vectorInners[InnerActual].Estado = 8;
                        }
                        else
                        {
                            AppendTextBox(textBox1,"Inner: " + InnerActual.ToString() + " Conf Entrada online FAIL");
                            vectorInners[InnerActual].CountFails++;
                            if (vectorInners[InnerActual].CountFails > 5)
                            {
                                //vuele a estado de reconexion
                                vectorInners[InnerActual].Estado = 1;
                                break;
                            }
                        }
                        //Estado = 9;
                        #endregion
                        break;
                    case 8:
                        #region espera la lectura de Tarjeta
                        if (vectorInners[InnerActual].PasoTarjeta == false)
                        {
                            AppendTextBox(textBox1, "Esperando Tarjeta! inner [" + InnerActual.ToString() + "]");   
                            vectorInners[InnerActual].PasoTarjeta = true;
                        }
                        
                        
                        Cartao = new StringBuilder();
                        res = EasyInner.ReceberDadosOnLine(InnerActual, ref Origem, ref Complemento,
                            Cartao, ref Dia, ref Mes, ref Ano, ref Hora, ref Minuto, ref Segundo);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {

                            strCartao = "";
                            vectorInners[InnerActual].PasoTarjeta = false;

                            for (var Count = 0; Count < qtyB; Count++)
                            {
                                strCartao += System.Convert.ToString(System.Convert.ToChar(Cartao[Count]));
                            }

                            AppendTextBox(textBox1,"Datos en linea Inner: " +
                                     InnerActual.ToString() + " " +
                                     "Origem: " + Origem.ToString() + " " +
                                     "Complemento: " + Complemento.ToString() +
                                     " Cartão: " + strCartao + " Data: " +
                                     Dia.ToString() + "/" +
                                     Mes.ToString() + "/" +
                                     Ano.ToString() + " " +
                                     Hora.ToString() + ":" +
                                     Minuto.ToString() + ":" +
                                     Segundo.ToString());
                            
                            //x: comparar contra la lista de la base de datos de control de acceso 
                            if (VerificaTarjeta(strCartao) == true)
                            {
                                //**********************************tiene permiso
                                if (EasyInner.AcionarBipCurto(InnerActual) == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                {

                                    //res = EasyInner.EnviarMensagemPadraoOnLine(InnerAtual, 1, "Por favor Pase");
                                    res = EasyInner.EnviarMensagemPadraoOnLine(InnerActual, (byte)Enumeradores.Opcao.NAO,
                                        "*" + strCartao + "*" +
                                        "    Liberado     ");
                                    if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                    {
                                        vectorInners[InnerActual].TimerMsgOnline = DateTime.Now;
                                        vectorInners[InnerActual].renewMsgOnline = true;
                                        if (vectorInners[InnerActual].isInnerNet == true)
                                        {
                                            EasyInner.AcionarRele2(InnerActual);
                                        }
                                        else
                                        {
                                            EasyInner.LiberarCatracaDoisSentidos(InnerActual);
                                        }
                                        //se debe cambiar de estado a verificar el paso
                                        //si es innernet no hay necesidad
                                        if (vectorInners[InnerActual].isInnerNet == true)
                                        {
                                            vectorInners[InnerActual].Estado = 9;
                                        }
                                        else
                                        {
                                            //no verifica el paso por tranca
                                            vectorInners[InnerActual].TimerAccess = DateTime.Now;
                                            vectorInners[InnerActual].Estado = 12;
                                        }

                                    }

                                }
                            }
                            else
                            {
                                //**************************************no tiene permiso
                                res = EasyInner.EnviarMensagemPadraoOnLine(InnerActual, (byte)Enumeradores.Opcao.NAO,
                                        "      Acceso     " +
                                        "     negado!     ");
                                if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                {
                                    res = EasyInner.AcionarBipLongo(InnerActual);
                                    vectorInners[InnerActual].isMsgNeg = true;
                                    vectorInners[InnerActual].TimerMsgNeg = DateTime.Now;
                                    vectorInners[InnerActual].Estado = 9;
                                    //falta cambiar el msg otravez
                                }
                            }
                            
                            
                        }
                        else
                        {
                            vectorInners[InnerActual].Estado = 9;
                        }
                        #endregion
                        break;
                    case 9:
                        //verifica el ping
                        #region ping verify
                        
                        t3 = DateTime.Now - vectorInners[InnerActual].TimerPingOnline;
                            if (t3.Seconds  >= 3)
                            {
                                vectorInners[InnerActual].TimerPingOnline = DateTime.Now;
                                //realizo ping
                                res = EasyInner.PingOnLine(InnerActual);
                                if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                                {
                                    vectorInners[InnerActual].Estado = 7;
                                }
                                else
                                {
                                    vectorInners[InnerActual].Estado = 1;
                                    break;
                                }
                            }
                            else
                            {
                                t3 = DateTime.Now - vectorInners[InnerActual].TimerMsgNeg;
                                if (vectorInners[InnerActual].isMsgNeg == true && t3.Seconds  > 2)
                                {
                                    vectorInners[InnerActual].isMsgNeg = false;
                                    EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                                    vectorInners[InnerActual].Estado = 7;
                                }
                                else
                                {
                                    t3 = DateTime.Now - vectorInners[InnerActual].TimerMsgOnline;
                                    if (vectorInners[InnerActual].renewMsgOnline == true && t3.Seconds > 2)
                                    {
                                        vectorInners[InnerActual].renewMsgOnline = false;
                                        EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                                        vectorInners[InnerActual].Estado = 7;
                                    }
                                    else
                                    {
                                        vectorInners[InnerActual].Estado = 8;    
                                    }
                                    
                                }

                            }
                            #endregion
                        //Thread.Sleep(20);
                        break;
                    case 12:
                        //paso por l tranca
                        #region verificar el giro del molinete
                        if (vectorInners[InnerActual].PasoMSGmolinete == false)
                        {
                            AppendTextBox(textBox1, "Verificando Giro del Molinete! inner[" + InnerActual + "]");
                            vectorInners[InnerActual].PasoMSGmolinete = true;
                        }
                        
                        //verificar  el giro del molinete
                        
                        res = EasyInner.ReceberDadosOnLine(InnerActual, ref Origem, ref Complemento,
                            Cartao, ref Dia, ref Mes, ref Ano, ref Hora, ref Minuto, ref Segundo);
                        if (res == (int)Enumeradores.Retorno.RET_COMANDO_OK)
                        {
                            if (Origem == (int)Enumeradores.Origem.FIM_TEMPO_ACIONAMENTO)
                            {
                                //UiMainOnline.lblDados.Text = "Não girou a catraca!";
                                AppendTextBox(textBox1,"No ha girado el Molinete!");
                                EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                                vectorInners[InnerActual].PasoMSGmolinete = false;
                                vectorInners[InnerActual].Estado  = 9;
                            }
                            else if (Origem == (int)Enumeradores.Origem.GIRO_DA_CATRACA_TOPDATA)
                            {
                                //UiMainOnline.lblDados.Text = "Girou a catraca!";
                                EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                                AppendTextBox(textBox1, "Paso el molinete!");
                                vectorInners[InnerActual].PasoMSGmolinete = false;
                                vectorInners[InnerActual].Estado  = 9;
                            }
                        }
                        else
                        {
                            t3 = DateTime.Now - vectorInners[InnerActual].TimerAccess;
                            if (t3.Seconds > 8)
                            {
                                AppendTextBox(textBox1, "Se vencio el tiempo de acceso! inner [" + InnerActual.ToString() + "]");
                                EasyInner.EnviarMensagemPadraoOnLine(InnerActual, 1, "   *En Linea*   ");
                                vectorInners[InnerActual].PasoMSGmolinete = false;
                                vectorInners[InnerActual].Estado = 9;
                            }
                            
                        }
                        #endregion
                        break;
                }
                

                InnerActual += 1;
                if (InnerActual > MaxInners)
                {
                    InnerActual = 1;
                }

            }
            EasyInner.FecharPortaComunicacao();
            AppendTextBox(textBox1, "Hilo Finalizado!");
        }
        /// <summary>
        /// Retorna un valor si la tarjeta esta permitida
        /// </summary>
        /// <param name="card"></param>
        /// <returns></returns>
        public bool VerificaTarjeta( string card )
        {
            int res;
            bool ret = false;

            //TODO:Aqui se debe hacer la verificacin contra la db para los persmisos de una tarjeta
            

            if (card.Contains("00064692351783"))
            {
                ret = true;
                
                //System.Threading.Thread.Sleep(50);


            }
            else
            {
                ret = false;
                


            }
            return ret;
        }

        private void frmMultiInners_Load(object sender, EventArgs e)
        {
            tEstado.Enabled = true;
            Termino = false;
            Thread molinete1 = new Thread(new ThreadStart(ProcesoInners));
            molinete1.Start();
        }

        private void tEstado_Tick(object sender, EventArgs e)
        {
            Color cg = new Color();

            foreach (var eN in vectorInners)
            {
                if (eN.isOnline == true)
                {
                    cg = Color.Green;
                }
                else
                {
                    cg = Color.DarkRed;
                }
                switch (eN.IdInner)
                {
                    case 1:
                        ovalShape1.BackColor = cg;
                        break;
                    case 2:
                        ovalShape2.BackColor = cg;
                        break;
                    //case 3:
                    //    ovalShape3.BackColor = cg;
                    //    break;
                    //case 4:
                    //    ovalShape4.BackColor = cg;
                    //    break;
                }
            }
        }
    }
}
